package com.starhub.engine.milvus.service;

import java.util.List;
import java.util.Map;

/**
 * milvus向量数据库相关业务接口
 *
 * @author Jx
 * @version 2024-3-18
 */
public interface IMilvusService {
    /**
     * 设置标记
     * @param mark 标记
     */
    void setMark(String mark);

    /**
     * 创建集合
     * @param collectionName 集合名称
     * @param desc 集合描述
     */
    void create(String collectionName, String desc);

    /**
     * 检查集合是否存在
     * @param collectionName 集合名称
     * @return 是否存在
     */
    boolean hasCollect(String collectionName);

    /**
     * 插入数据
     * @param collectionName 集合名称
     * @param dataList 数据列表，包含id和向量数据
     * @return 是否成功
     */
    boolean insert(String collectionName, List<Map<String, Object>> dataList);

    /**
     * 向量搜索
     * @param collectionName 集合名称
     * @param vector 查询向量
     * @param topK 返回最相似的K个结果
     * @return 搜索结果列表
     */
    List<Map<String, Object>> search(String collectionName, String vector, Integer topK);

    /**
     * 删除数据
     * @param collectionName 集合名称
     * @param ids 要删除的数据ID列表
     * @return 是否成功
     */
    boolean delete(String collectionName, List<String> ids);

    /**
     * 更新数据
     * @param collectionName 集合名称
     * @param updateData 更新数据，包含id和要更新的字段
     * @return 是否成功
     */
    boolean update(String collectionName, Map<String, Object> updateData);

    /**
     * 获取数据
     * @param collectionName 集合名称
     * @param ids 数据ID列表
     * @return 数据列表
     */
    List<Map<String, Object>> get(String collectionName, List<String> ids);

    /**
     * 获取集合中的数据数量
     * @param collectionName 集合名称
     * @return 数据数量
     */
    Long count(String collectionName);

    /**
     * 删除集合
     * @param collectionName 集合名称
     * @return 是否成功
     */
    boolean drop(String collectionName);

    /**
     * 列出所有集合
     * @return 集合名称列表
     */
    List<String> listCollections();
}
